热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

字面|事情_C#编写上位机使用UDP给单片机发送Json格式数据

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C#编写上位机使用UDP给单片机发送Json格式数据相关的知识,希望对你有一定的参考价值。C#编写上位机使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C#编写上位机使用UDP给单片机发送Json格式数据相关的知识,希望对你有一定的参考价值。



C#编写上位机使用UDP给单片机发送Json格式数据


  • 项目需求
  • 编程环境
  • 使用的技术
    • UDP
    • JSON
      • JSON介绍
      • JSON 语法规则
      • C# 例程


  • 关键程序
  • 页面设计
  • 后续


项目需求

很多时候,我们想要通过上位机给我们的单片机下发命令,是我们能够控制单片机进行一些操作。而通常我们有几种方式,分别是串口传输、蓝牙传输、UDP和TCP这类WIFI传输等。
在本文就用C#编写上位机使用UDP给单片机发送Json格式数据,进行数据的传输。


编程环境

Visual Studio 2019


使用的技术

UDP

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。
UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
方法 说明
Close 关闭 UDP 连接
Connect 建立与远程主机的连接
DropMulticastGroup 退出多路广播组
JoinMulticastGroup 将 UdpClient 添加到多路广播组
Receive 返回已由远程主机发送的 UDP 数据文报
Send 将 UDP 数据文报发送到远程主机


方法说明
Close关闭 UDP 连接
Connect建立与远程主机的连接
DropMulticastGroup退出多路广播组
JoinMulticastGroup将 UdpClient 添加到多路广播组
Receive返回已由远程主机发送的 UDP 数据文报
Send将 UDP 数据文报发送到远程主机

创建监听举例:

UdpClient udpserver;
private void udpListen()

udpserver = new UdpClient(8888);//参数为要进行UDP监听的端口

接收数据举例:

private void getMsg()//开启一个异步线程去执行该方法

//定义一个IPEndPoint对象用来装载数据来源的IP和端口信息
IPEndPoint remoteIpAndPort = new IPEndPoint(IPAddress.Any, 0);
while (true)

//等待消息,注意,使用该方法在等待消息时会阻塞线程
byte[] msgBytes = udpserver.Receive(ref remoteIpAndPort)
string receivedStr = System.Text.Encoding.UTF8.GetString(msgBytes);



发送数据举例:

private void buttonSend_Click(object sender, EventArgs e)

//将要发送的数据转化成byte数组
byte[] b = System.Text.Encoding.UTF8.GetBytes("Hello");
//创建目标IP端口信息
IPEndPoint sendTo = new IPEndPoint(IPAddress.Parse("192.168.1.233"),1234);
//发送数据
this.udpserver.Send(b, b.Length, sendTo);


JSON


JSON介绍

JSON(Javascript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


JSON 语法规则

JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。
JSON是一个序列化的对象或数组。


  1. 六个构造字符:
    begin-array = ws %x5B ws ; [ 左方括号
    begin-object = ws %x7B ws ; 左大括号
    end-array = ws %x5D ws ; ] 右方括号
    end-object = ws %x7D ws ; 右大括号
    name-separator = ws %x3A ws ; : 冒号
    value-separator = ws %x2C ws ; , 逗号
  2. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
    ws = *(%x20 /; 空间
    %x09 /; 水平标签
    %x0A /; 换行或换行
    %x0D); 回程
  3. JSON的值
    JSON的构成: ws 值 ws [1]
    值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
    对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:
    1

“name”: “John Doe”, “age”: 18, “address”: “country” : “china”, “zip-code”: “10000”

数组是由方括号括起来的一组值构成,如:

[3, 1, 4, 1, 5, 9, 2, 6]

字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
一些合法的JSON的实例:

"a": 1, "b": [1, 2, 3]

[1, 2, "3", "a": 4]

3.14

"wulianwangzhishi"

C# 例程

JavascriptSerializer ser = new JavascriptSerializer();
CtrlJson rcj = new CtrlJson() cmd = "YELLOW" ;
string outputJson = ser.Serialize(rcj);
byte[] sendByte = System.Text.Encoding.Default.GetBytes(outputJson);

关键程序

private void button1_Click(object sender, EventArgs e)

IPAddress Adrr;
if (string.IsNullOrEmpty(textBox1.Text))

Adrr = IPAddress.Parse("255.255.255.255");

else

Adrr = IPAddress.Parse(textBox1.Text);

IPEndPoint remoteIpep = new IPEndPoint(Adrr, 50001); ;
JavascriptSerializer ser = new JavascriptSerializer();
CtrlJson rcj = new CtrlJson() cmd = "RED" ;
string outputJson = ser.Serialize(rcj);
byte[] sendByte = System.Text.Encoding.Default.GetBytes(outputJson);
//发送
ctrludpcRecv.Send(sendByte, sendByte.Length, remoteIpep);



页面设计


后续

完整源码,可以关注我的程序设计专栏。
或者关注微信公众号上,发送“C#上位机之UDP”获取。

编写不易,感谢支持。


推荐阅读
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • Iwouldliketohaveatooltopdisplayedonatextboxunderacertainsituation.我希望在特定情况下在文本框中显示工具栏 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在深入探讨进程间通信技术时,本文重点解析了描述符传递的方法。通过详细分析发送和接收描述符的过程,文章首先介绍了发送描述符的具体步骤,并提供了相关函数原型。此外,还讨论了如何高效地在不同进程之间传输文件描述符,以实现资源的共享和同步。这一技术在多进程应用中具有重要意义,能够显著提升系统的性能和可靠性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
author-avatar
手机用户2602906017
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有